package com.xw.comm.service.impl;

import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.InputStream;
import java.util.Arrays;

/**
 * 串口监听
 * @author xiongwei_vendor
 * @date 2020/12/8 19:22
 */
@Slf4j
@Data
@AllArgsConstructor
public class SerialListener implements SerialPortEventListener {

    SerialPort serialPort;

    @Override
    public void serialEvent(SerialPortEvent serialPortEvent) {
        //对以下内容进行判断并操作
        /*
        BI -通讯中断
    　　CD -载波检测
    　　CTS -清除发送
    　　DATA_AVAILABLE -有数据到达
    　　DSR -数据设备准备好
    　　FE -帧错误
    　　OE -溢位错误
    　　OUTPUT_BUFFER_EMPTY -输出缓冲区已清空
    　　PE -奇偶校验错
        RI -　振铃指示
        */
        //switch多个，if单个
        if (serialPortEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                InputStream in = null;
                byte[] ints = null;
                in = serialPort.getInputStream();
                int bufflenth = in.available();
                while (bufflenth != 0) {
                    // 初始化int数组为buffer中数据的长度
                    ints = new byte[bufflenth];
                    in.read(ints);
                    log.info("读取到数据 = {}", Arrays.toString(ints));
                    bufflenth = in.available();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
